home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Reference / the cmsp digests ('94-'97) / csmp digest Vol 3 No 081 < prev    next >
Text File  |  1995-02-01  |  48KB  |  1,335 lines

  1. C.S.M.P. Digest             Wed, 01 Feb 95       Volume 3 : Issue 81
  2.  
  3. Today's Topics:
  4.  
  5.         Apple events & non-applications (was Re: AppleScript and the Chooser... NOT...)
  6.         Can I '#include <foo-bar.h>' in C++ with Symantec or CodeWarrior?
  7.         Cool MacsBug Tricks
  8.         Globals with Quickdraw GX?
  9.         PPC glue for 68K library?
  10.         PowerPC Globals
  11.         Q: Is file on AppleShare volume?
  12.         Registering an NBP name?
  13.         What key code is Command-.  (One for the FAQ)
  14.         dynamic-shared libs on MacOS ???
  15.  
  16.  
  17.  
  18. The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
  19. (pottier@clipper.ens.fr).
  20.  
  21. The digest is a collection of article threads from the internet newsgroup
  22. comp.sys.mac.programmer.  It is designed for people who read c.s.m.p. semi-
  23. regularly and want an archive of the discussions.  If you don't know what a
  24. newsgroup is, you probably don't have access to it.  Ask your systems
  25. administrator(s) for details.  If you don't have access to news, you may
  26. still be able to post messages to the group by using a mail server like
  27. anon.penet.fi (mail help@anon.penet.fi for more information).
  28.  
  29. Each issue of the digest contains one or more sets of articles (called
  30. threads), with each set corresponding to a 'discussion' of a particular
  31. subject.  The articles are not edited; all articles included in this digest
  32. are in their original posted form (as received by our news server at
  33. nef.ens.fr).  Article threads are not added to the digest until the last
  34. article added to the thread is at least two weeks old (this is to ensure that
  35. the thread is dead before adding it to the digest).  Article threads that
  36. consist of only one message are generally not included in the digest.
  37.  
  38. The digest is officially distributed by two means, by email and ftp.
  39.  
  40. If you want to receive the digest by mail, send email to listserv@ens.fr
  41. with no subject and one of the following commands as body:
  42.     help                                Sends you a summary of commands
  43.     subscribe csmp-digest Your Name     Adds you to the mailing list
  44.     signoff csmp-digest                 Removes you from the list
  45. Once you have subscribed, you will automatically receive each new
  46. issue as it is created.
  47.  
  48. The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
  49. Questions related to the ftp site should be directed to
  50. scott.silver@dartmouth.edu. Currently no previous volumes of the CSMP
  51. digest are available there.
  52.  
  53. Also, the digests are available to WAIS users.  To search back issues
  54. with WAIS, use comp.sys.mac.programmer.src. With Mosaic, use
  55. http://www.wais.com/wais-dbs/comp.sys.mac.programmer.html.
  56.  
  57.  
  58. -------------------------------------------------------
  59.  
  60. >From leonardr@netcom.com (Leonard Rosenthol)
  61. Subject: Apple events & non-applications (was Re: AppleScript and the Chooser... NOT...)
  62. Date: Tue, 17 Jan 1995 22:53:25 GMT
  63. Organization: Aladdin Systems, Inc.
  64.  
  65. In article <mxmora-1701950834580001@xavier.sri.com>, mxmora@unix.sri.com
  66. (Matthew Xavier Mora) wrote:
  67.  
  68. > In article <jens_alfke-1301951153550001@jensothermac.apple.com>,
  69. > jens_alfke@powertalk.apple.com (Jens Alfke) wrote:
  70. > > JLEWIS@HYRAX.IUPUI.EDU (Jeff Lewis) wrote:
  71. > > > I'm wanting to write a script to pull of the chooser and logonto a
  72. netware 
  73. > > > server.  I can do this manually but cannot get a script to do this.
  74. > > 
  75. > > It's impossible to script (or just send Apple events to) the Chooser,
  76. > > because the Chooser is a desk accessory, not an application. Only
  77. > > applications can be sent Apple events. For the same reason, you can't
  78. > > script control panels.
  79. > What? I have an fkey that sends AppleEvents. Why can't da's send apple events?
  80.    It is possiblie for any type of code to send Apple events, PROVIDED
  81. that they live in an ae-aware process.  So your FKEY will run fine IF you
  82. use it in an application that has the 'high-level event aware' bit set,
  83. however if you try it from one which does not, then you FKEY will fail. 
  84. The reason is that the process & AE manager collaborate to create the PPC
  85. port for the process (AE's use PPC for transport) and w/o one you can't
  86. send to anything other than yourself.
  87.  
  88.    Recieving AE's in a non-application is also a logical problem, since an
  89. AE target has to be a processID (or at least a PPC port) and things like
  90. INIT's, FKEYs and DA's don't have such :(.  HOWEVER, there if you think
  91. about it, there is a trick.  There are two types of event handlers,
  92. application and system.  Since system handlers are available anywhere, you
  93. can install one from anywhere!  So just have your code install a system
  94. handler and the event can be sent to any process since the AEM will
  95. forward unhandled events up to the system handlers.
  96.  
  97.  
  98. Leonard
  99. - ------------------------------------------------------------------------
  100. Leonard Rosenthol                      Internet:       leonardr@netcom.com
  101. Director of Engineering                AppleLink:      MACgician
  102. Aladdin Systems, Inc.                  GEnie:          MACgician
  103.  
  104. ---------------------------
  105.  
  106. >From denis@konishiki.Stanford.EDU (Denis Bohm)
  107. Subject: Can I '#include <foo-bar.h>' in C++ with Symantec or CodeWarrior?
  108. Date: 5 Jan 1995 11:04:21 -0800
  109. Organization: Stanford University, CA 94305, USA
  110.  
  111. I am working on a large application which uses a number of
  112. subsystems that are in different directories.  This application
  113. is intended to run on Mac, Windows, and Unix systems.
  114.  
  115. On Unix and Windows I can include a header "c_file.h" from directory
  116. "b_dir" using:
  117.  
  118.   #include <b_dir/c_file.h>
  119.  
  120. and tell the preprocessor which directories to search to find
  121. the "b" directory when processing includes with something like
  122.  
  123.   CC -I/a_dir
  124.  
  125. The Windows compiler I am using seems to interpret the "/" as a
  126. directory seperator in the same way that Unix compilers do.
  127.  
  128. Looking at the Symantec C++ 7.0 documentation I don't see any
  129. way to make this work.  It seems that you can put source files
  130. in directories, but you can't use the directory name in the
  131. include directive.  Is there some way to make this work in
  132. Symantec C++, short of adding something like:
  133.  
  134.   #ifdef Mac
  135.   #include "c_file.h"
  136.   #else
  137.   #include <b_dir/c_file.h>
  138.   #endif
  139.  
  140. to every file?
  141.  
  142. How about Code Warrior?
  143.  
  144. +++++++++++++++++++++++++++
  145.  
  146. >From Jaeger@fquest.com (Brian Stern)
  147. Date: 5 Jan 1995 23:51:42 GMT
  148. Organization: The University of Texas at Austin, Austin, Texas
  149.  
  150. In article <3ehfrl$cgt@konishiki.Stanford.EDU>,
  151. denis@konishiki.Stanford.EDU (Denis Bohm) wrote:
  152.  
  153. < I am working on a large application which uses a number of
  154. < subsystems that are in different directories.  This application
  155. < is intended to run on Mac, Windows, and Unix systems.
  156. < On Unix and Windows I can include a header "c_file.h" from directory
  157. < "b_dir" using:
  158. <   #include <b_dir/c_file.h>
  159. < and tell the preprocessor which directories to search to find
  160. < the "b" directory when processing includes with something like
  161. <   CC -I/a_dir
  162. < The Windows compiler I am using seems to interpret the "/" as a
  163. < directory seperator in the same way that Unix compilers do.
  164. < Looking at the Symantec C++ 7.0 documentation I don't see any
  165. < way to make this work.  It seems that you can put source files
  166. < in directories, but you can't use the directory name in the
  167. < include directive.  Is there some way to make this work in
  168. < Symantec C++, short of adding something like:
  169. <   #ifdef Mac
  170. <   #include "c_file.h"
  171. <   #else
  172. <   #include <b_dir/c_file.h>
  173. <   #endif
  174. < to every file?
  175. < How about Code Warrior?
  176.  
  177. On the Mac the separator to indicate a subdirectory is ':'.  A slash '/'
  178. is a valid character in a filename.  So 'b_dir/c_file.h' is a valid Mac
  179. filename.  You are probably stuck with using some ugly preprocessor hack. 
  180. Perhaps this might work:
  181.  
  182. #ifdef Mac
  183. #define b_dir/
  184. #endif
  185.  
  186. Both SC++ and CW will search through all the directories in your project
  187. tree for the headers, and they both have ways to search any arbitrary
  188. directory as well.
  189.  
  190. -- 
  191. Brian  Stern  :-{)}
  192. Toolbox commando and Menu bard
  193. Jaeger@fquest.com
  194.  
  195. +++++++++++++++++++++++++++
  196.  
  197. >From lalonde@metrowerks.ca (Paul Lalonde)
  198. Date: Thu, 05 Jan 1995 20:54:56 -0500
  199. Organization: Metrowerks Inc
  200.  
  201. In article <3ehfrl$cgt@konishiki.Stanford.EDU>,
  202. denis@konishiki.Stanford.EDU (Denis Bohm) wrote:
  203.  
  204. [snip]
  205. > On Unix and Windows I can include a header "c_file.h" from directory
  206. > "b_dir" using:
  207. >   #include <b_dir/c_file.h>
  208. [snip]
  209. > Looking at the Symantec C++ 7.0 documentation I don't see any
  210. > way to make this work.  It seems that you can put source files
  211. > in directories, but you can't use the directory name in the
  212. > include directive.  Is there some way to make this work in
  213. > Symantec C++, short of adding something like:
  214. >   #ifdef Mac
  215. >   #include "c_file.h"
  216. >   #else
  217. >   #include <b_dir/c_file.h>
  218. >   #endif
  219.  
  220. The contents of the #include filename are completely implementation-
  221. dependent.  You can't write code like this and expect it to work on all 
  222. platforms.  For example, the Mac uses colons (:) instead of slashes (/) 
  223. to delimit directories in pathnames.  None of the current Mac compilers 
  224. interpret slashes as pathname separators.
  225.  
  226. A clever workaround I've seen often is to rename your header to 
  227. "b_dir/c_file.h", which is a perfectly legal filename on the Mac.
  228.  
  229. Paul Lalonde
  230. lalonde@metrowerks.ca
  231.  
  232. +++++++++++++++++++++++++++
  233.  
  234. >From pcastine@prz.tu-berlin.de (Peter Castine)
  235. Date: Tue, 17 Jan 1995 11:32:00 GMT
  236. Organization: PRZ TU-Berlin
  237.  
  238. In article <3ff20o$pmp@lll-winken.llnl.gov>,
  239. Patrick C. Beard  <beard@cs.ucdavis.edu> wrote:
  240. >
  241. >Sometimes you want to share code (#includes) between projects
  242. >that aren't in the same folder. In both environments (THINK
  243. >7.0.X & MW 5) you can use #include directives such as:
  244. >
  245. >#include "::common:shared.h"
  246. >
  247. >which would tell the compiler to look up in a sibling folder
  248. >called common.
  249.  
  250. For this case it would be more to the point to use aliases.
  251.  
  252. Keep shared files inside a folder, make an alias to this folder and
  253. put the alias in the "Aliases" folder in your project folder. 
  254.  
  255. The ins and outs of this is all documented. Read the fabulous manual ;-)
  256.  
  257.  
  258. -- 
  259. Peter Castine               | Oh, wenn jene alten, musikkundigen Gelehrten die
  260. pcastine@prz.tu-berlin.de   | Modernen hoerten, was wuerden sie tun, was
  261. Process Control Center      | wuerden sie sagen!
  262. Technical University Berlin |               -- Jacobus von Luettich (ca. 1330)
  263.  
  264. +++++++++++++++++++++++++++
  265.  
  266. >From jlgriswo@ingr.com (John Griswold)
  267. Date: Tue, 17 Jan 1995 18:45:10 -0600
  268. Organization: Intergraph (Core Drafting S/W)
  269.  
  270. In article <jens_alfke-1601951124010001@jensothermac.apple.com>,
  271. jens_alfke@powertalk.apple.com (Jens Alfke) wrote:
  272.  
  273. > In article <3ehfrl$cgt@konishiki.Stanford.EDU>,
  274. > denis@konishiki.Stanford.EDU (Denis Bohm) wrote:
  275. > > Looking at the Symantec C++ 7.0 documentation I don't see any
  276. > > way to make this work.  It seems that you can put source files
  277. > > in directories, but you can't use the directory name in the
  278. > > include directive.
  279. > You don't need to. Both the Symantec and Metrowerks compilers
  280. > automatically search subdirectories. It doesn't matter where the files
  281. > live as long as they are somewhere inside the folders you specify for your
  282. > include paths. (I'm talking about the integrated environments here, not
  283. > the MPW tools.)
  284. > --Jens Alfke
  285.  
  286. Here's a simple little trick that I did to handle a mess of unix code that
  287. I had to port a while back, where they used #include "sys/xxxx.h" in a
  288. bunch of files.  I created a folder under my project folder called
  289. "unix/sys".  In that folder I created files named "sys/tools.h",
  290. "sys/uhdr.h", "sys/whatever.h", and so on.  In those files they included
  291. the needed "real" header files.  Then these "glue" header files got me
  292. past editing hundreds of source files.  Of course I found lots of other
  293. problems in the port but this worked for a bunch of files.
  294.  
  295.   _~\\|///-_     John Griswold
  296.   //       \\    Intergraph Corp.
  297.   / ==   == \    Huntsville, AL
  298.    -(o)^(o)-     (205) 730-2000
  299.   /    L    \
  300.   // /|!|\ \\    jlgriswo@ingr.com
  301.   ///`---'\\~    CompuServe: 74133,714
  302.    ///|||\\\     AOL: JohnGRIZ
  303.     ~?|||\\
  304.  
  305. ---------------------------
  306.  
  307. >From kenlong@netcom.com (Ken Long)
  308. Subject: Cool MacsBug Tricks
  309. Date: Sat, 14 Jan 1995 03:45:15 GMT
  310. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  311.  
  312. This file was posted on AOL by Macneil Shonle (wrote BendImageFast, 
  313. worked on clut_fade 1.2, and wrote pict2pict-fader).  It shows some 
  314. things that can be done with MacsBug, and requests input for more.
  315.  
  316. Enjoy!
  317.  
  318. -Ken-
  319.  
  320. p.s:  I see the quotemarks came through as 'R' and 'S'.  0L!
  321. >----------------------->
  322.  
  323. Cool MacsBug Tricks
  324.  
  325. This guide is to help you in using MacsBug. It is a list of
  326. tricks, but it is just the tip of the iceberg of the cool stuff
  327. you can do. This will start off with some relatively easy stuff
  328. aimed towards beginners, then it will go into some more advanced
  329. stuff. All of them are cool. When this says RDrop into MacsBug,S
  330. it means that you should hit the programmers button (which is on
  331. your computer, or on your keyboard, depending), if MacsBug is
  332. installed, you should see the debugger screen ready to serve you.
  333. You can Rdrop outS of MacsBug by typing RGS and then return, or by
  334. holding down Command-G. Without further ado, lets begin!
  335.  
  336. Number Conversion MacsBug can be used as a quick hexadecimal to
  337. decimal converter (and vise versa). I used to use PCalc (a great
  338. application by the way) or some other conversion application, but
  339. now I drop into MacsBug and type in the number I want to convert
  340. and hit return. Example: You want to find out what R0x3ES is in
  341. decimal, when in MacsBug type R$3ES and hit return. MacsBug will
  342. then say:
  343.  
  344. $3E = $0000003E  #62  #62  '%%%>'
  345.  
  346. The first number ($0000003E) is the value in hexadecimal that you
  347. just typed in. The second number is what the value is as an
  348. unsigned decimal, the third is the signed version. The last one
  349. ('%%%>') is the ASCII equivalent of the number (like: $41 is RAS,
  350. $42 is RBS, $43 is RCS, and $3E is R>S), zeros (like the first
  351. three bytes) are represented with the bullet (R%S).
  352.  
  353. You can also find out the decimal/hexadecimal equivalent of any
  354. ASCII character by typing the letter balanced between two single
  355. quotes. Example: Type in: 'A', you should get #65 as your answer.
  356. By the way: the dollar sign means that the number is in
  357. hexadecimal. Much like CUs R0xXXS notation, R$XXS is what assembly
  358. people use. Numbers in MacsBug will default to hexadecimal, except
  359. for when the hexadecimal number is a command or a regster
  360. (example: ReaS is the command to restart the current application,
  361. when you type in ea it will try this command, you must type in $ea
  362. in order to avoid this conflict. I would try to get into the habit
  363. of typing in a $ for every hexadecimal number anyway, itUs not too
  364. hard to get used to.
  365.  
  366. Similarly, you have to type a # in order to express decimal
  367. numbers, and you can use the conversion method just described
  368. (type in the number, hit return) to find out its equivalent
  369. hexadecimal number and ASCII  character.
  370.  
  371. What Was My Monitor Size? HereUs an impresive way to show a friend
  372. how many pixels horizontally and vertically they have on thier
  373. monitor. Drop into MacsBug and type in: dm @@MainDevice GDevice.
  374. This will show you the struct members of the MainDevice (which
  375. happens to be a GDevice), you should see indented the gdPMap and
  376. three lines below it will be bounds, with four numbers to the
  377. right of it. These four numbers are the top, left, bottom and
  378. right coordinates of the monitor, respectively.
  379.  
  380. The dm command is short for Rdisplay memory,S after you say RdmS
  381. you type in the address of the memory you want to display.
  382. MainDevice is a system global that is a handle (a pointer to a
  383. pointer) to the main graphics device (the one with the menu bar).
  384. The two @@ symbols are how you express double-indirection, in C
  385. you use R*S to express indirection (dereferencing), which is in
  386. put in prefix notation like R@S is. (People who program in Pascal
  387. can use the postfix indirection notation by saying Rdm
  388. MainDevice^^ GDeviceS.)
  389.  
  390. After you give the dm command the pointer, you give it the format
  391. you want to see it diplayed as. You can say any number for the
  392. number of bytes you want displayed, or you can say Rect to see the
  393. first eight bytes of the memory in the form of a rectangle. You
  394. can also use: Byte, Word, Long, SignedByte, SignedWord,
  395. SignedLong, UnsignedByte, UnsignedWord, UnsignedLong, PString,
  396. CString, and PixMap, GDevice, RGBColor, CGrafPort and any number
  397. of other templates you may have installed.
  398.  
  399. Example: you know a rectangle is at address $00058EA6 and you want
  400. to see what it is. All you have to do is type in Rdm $00058EA6
  401. RectS and MacsBug will display it for you.
  402.  
  403. By the way: a template is a C struct (or a Pascal record) or some
  404. other layout of memory that MacsBug knows about, you can type
  405. RtmpS to find out all of the templates your version of MacsBug
  406. has. But letUs say you want to find all of the templates that
  407. begin with the word Rcolor,S all you would have to say is Rtmp
  408. colorS, which will give you ColorSpec and ColorTable (if those
  409. templates were installed).
  410.  
  411. Error Lookup DonUt you hate it when you are working in an
  412. application, minding your own business, when all-of-a-sudden the
  413. program quits and the system tells you an error of type X occured?
  414. (Where RXS is the error number, like 1, 10 or -42.) There are many
  415. applications made (like MacErrors) where you can look up these
  416. numbers and find out what went wrong. MacsBug can also do this,
  417. all you have to do is type RerrorS and then the error number. Keep
  418. in mind that the error numbers the system gives you are decimal
  419. (not hexadecimal), so you should put a R#S in front of it.
  420.  
  421. Example: The sytem tells you: RAn error of type 4 has occured.S
  422. All you have to do is drop into MacsBug and type Rerror #4S,
  423. MacsBug will then say R$0004  #4  zero divide errorS, which is
  424. just what an error of type four is.
  425.  
  426. Note: This error feature is not in earlier versions of MacsBug, so
  427. you may not have it.
  428.  
  429. The Simple Calculator You can use MacsBug as a simple calucator.
  430. LetUs say you need to know what 7 times 17 is, type in R#7 * #17S,
  431. and hit return. ThatUs all! The number 119 should now be on your
  432. screen. It will be hidden in the line:
  433.  
  434. #7 * #17 = $00000077  #119  #119  '%%%w'
  435.  
  436. The lower case letter RwS is the 119th ASCII character, as the
  437. previous line shows us. LetUs try another example, how about 5
  438. plus 6? You would type in R#5 + #6S, and hit return. You should
  439. then see:
  440.  
  441. #5 + #6 = $0000000B  #11  #11  '%%%%'
  442.  
  443. MacsBug can also handle multiple operations at a time, like 5 plus
  444. 6 plus 10. If you want to say something even more advanced, like 5
  445. plus 6 times 4, remember to put parentheses around the apropiate
  446. numbers. MacsBug has no concept of orders of operations (like what
  447. we humans use), itUs quite possible for it to add before it
  448. multiplies. So say this: R#5 + (#6 * #4)S, which gives us #29,
  449. instead of R#5 + #6 * #4S, which gives us #44.
  450.  
  451. You can use: +, -, *, /, MOD for arithmetic; AND (or &), OR (or
  452. |), NOT (or !), XOR for boolean operations; and = (or ==), <> (or
  453. !=), <, >, <=, >= for equality. So you can type in R#5 + #4 = #9S,
  454. and MacsBug will give you a one, meaning that the equality you
  455. just said was true. If you said R#5 + #4 = #10S, Macsbug will give
  456. you a zero, meaning that the equality R5 plus 4 equals tenS is
  457. false.
  458.  
  459. Moving The Mouse Here is a cool trick to move the mouse. It done
  460. by setting memory, the mouse tracking variables specifically. So
  461. IUd like to talk about setting memory beforehand. There are four
  462. commands in MacsBug to set memory: SB (Set Byte), SW (Set Word),
  463. SL (Set Long), and SM (Set Memory). You give each of these
  464. commands an address first, and then the values of what you want to
  465. set the memory to. Example: There is a byte that you have the
  466. address of that you want to set to ten, you say RSB $XXXXXXXX
  467. #10S, where $XXXXXXXX is the address of the byte. Another example:
  468. There is a long that you have the address of that you want to set
  469. to R$4D616320S, you say RSL $XXXXXXXX $4D616320S, again where
  470. $XXXXXXXX is the address of the long. (You can use the SM command
  471. the same way in the case that the length you want to set is not 1,
  472. 2 or 4 bytes long. You use SW when you want to set a word (2
  473. bytes) ).
  474.  
  475. If you are familiar with Points (the vertical and horizontal
  476. coordinates of a point on the graf plane), you should know that
  477. they take up four bytes in memory. The high two bytes (the high
  478. word) is the vertical coordinate, and the low two bytes (the low
  479. word) is the horizontal coordinate. There are two global variables
  480. that are both Points, one called MTemp, the other called RawMouse,
  481. these variables are the information the Macintosh uses for the
  482. cursor. You can set these points by using SL. There is also a byte
  483. called CrsrNew, set this byte to 1 when you want to notify the
  484. Macintosh that the cursor posistions have changed. This is how you
  485. move the mouse to point (5,J6), near the upper-left corner of the
  486. screen, by typing in these three commands (hit return after each
  487. line):
  488.  
  489. SL MTemp $00060005 SL RawMouse $00060005 SB CrsrNew #1
  490.  
  491. Make sure MTemp and RawMouse have the same value. Now type
  492. Command-G to see your newly moved cursor.
  493.  
  494. Recovering From a Hung Serial Port Sometimes when youUre
  495. AppleTalking or modeming and something goes wrong (like you switch
  496. the modem off while data is being sent to it), the comptuer will
  497. hang. The mouse will still move, but clicking will have no effect.
  498. HereUs the solution:
  499.  
  500. Drop into MacsBug. You should see the routine name R_vSyncWaitS
  501. plus something as the current location. If you donUt, you probably
  502. hit the system while it was doing something else. Hit Command-G to
  503. get back out of MacsBug, and try again. After a few tries you
  504. should find _vSyncWait.
  505.  
  506. _vSyncWait is the routine that the system uses to wait for some
  507. input from a serial port. If you can read assembly code, youUll
  508. see that itUs pretty simple. HereUs the dump of the significant
  509. part:
  510.  
  511.      +0000  4080BB8C   MOVE.W     $0010(A0),D0                    
  512.        | 3028 0010      +0004  4080BB90   BGT.S      _vSyncWait   
  513.              ; 4080BB8C   | 6EFA
  514.  
  515. Register A0 is pointing to a system data structure, in which a
  516. word will be cleared when the awaited input arrives. The MOVE.W
  517. instruction grabs this word and puts it into register D0. The
  518. BGT.S instruction then Branches back to the MOVE.W if the byte it
  519. just fetched is Greater Than zero (hence BGT). So it happens that
  520. this byte is never going to arrive for whatever reason, but the
  521. computer is going to wait for eternity. The secret to fixing this
  522. is to use Command-T to go step along until the MOVE.W instruction
  523. is displayed as the current instruction. Now use the RswS command
  524. to set R@(a0+10)S to zero:
  525.  
  526. sw @(a0+10) 0
  527.  
  528. Then hit Command-T twice more. The MOVE.W instruction will take
  529. the zero you just set into memory and put it in D0, so the D0
  530. display on the right of the screen should have its right four
  531. digits all zeros. Then when you execute the BGT.S instruction, it
  532. should not go back to the MOVE.W since zero is not greater than
  533. zero.
  534.  
  535. Hit Command-G to go. If this was the only byte the software was
  536. waiting for, then it should continue running, although it may go a
  537. little crazy because itUs been suddenly disconnected from whatever
  538. peripheral it was talking to. Quit the program, fix your hardware,
  539. and try again.
  540.  
  541. Credits As the saying goes: Rgive credit where credit is due.S The
  542. authors of this are Macneil Shonle and Dustin Mitchell. Email
  543. RMacneilS@aol.comS if you got a trick or two up your sleeve, IUll
  544. put it in the next CMT so everyone else can know about it. (We
  545. want the really wacky tricks in particular.) 
  546.  
  547. Thanks for reading!
  548.  
  549.  
  550. ---------------------------
  551.  
  552. >From N.r.h. Black <nrhblack@delphi.com>
  553. Subject: Globals with Quickdraw GX?
  554. Date: Fri, 13 Jan 95 12:22:10 -0500
  555. Organization: Delphi (info@delphi.com email, 800-695-4005 voice)
  556.  
  557. Posted for a friend called Debbie Dittmer on 408 986 0115 X 3642
  558. (1) Where in cyberspace do people discuss problems with writing and
  559. using printer drivers and GX?
  560.  
  561. (2) What are the GX "instances" that replace globals, what messages are
  562. included in such "instances", and what message is best for global init
  563. and destroy in each "instance"?  i.e. when can a developer be sure the
  564. globals inited are the globals being accessed?
  565.  
  566. thanks  Henry
  567.  
  568. +++++++++++++++++++++++++++
  569.  
  570. >From mclow@san_marcos.csusm.edu (Marshall Clow)
  571. Date: Fri, 13 Jan 1995 21:15:58 -0800
  572. Organization: Aladdin Systems
  573.  
  574. In article <Bcw6RYy.nrhblack@delphi.com>, N.r.h. Black
  575. <nrhblack@delphi.com> wrote:
  576.  
  577. > Posted for a friend called Debbie Dittmer on 408 986 0115 X 3642
  578. She can mail me her questions, if you like (or you can).
  579.  
  580. > (1) Where in cyberspace do people discuss problems with writing and
  581. > using printer drivers and GX?
  582. >
  583.    I don't think that there are that many people writing GX printer
  584. drivers. I could be wrong, tho. [ There certainly are more GX driver
  585. developers than QuickDraw driver developers. ]
  586.  
  587. > (2) What are the GX "instances" that replace globals, what messages are
  588. > included in such "instances", and what message is best for global init
  589. > and destroy in each "instance"?  i.e. when can a developer be sure the
  590. > globals inited are the globals being accessed?
  591. >  
  592.     A GX printer driver, during the course of a print job, gets
  593. "instantiated" several times. Once is "in" the application doing the
  594. printing, for the print dialogs and spooling. Once is "in" the Finder, to
  595. handle the desktop printer window and menus. Once is "in" PrinterShare GX,
  596. which is where the spool file is processed, and the printer commands are
  597. generated, and the data is sent to the printer (usually).
  598.  
  599.     Each "instantiation" of the driver is begun by the sending of the
  600. message "Initialize", and ended by the sending of the message "Shutdown".
  601. If you need global state (that is always around), then you should allocate
  602. it in Initialize, and free it in Shutdown. OTOH, if you have global state
  603. that is important only while you are talking to the printer, you might
  604. want to consider allocating it in OpenConnection, and freeing it in
  605. CloseConnection. Whatever works for you.
  606.  
  607.    APDA has (finally) started selling the Developer University's
  608. self-paced course in how to write drivers. Six lessons in this course are
  609. about GX printer drivers. Plug. :-) [ I wrote that part, and no, I don't
  610. get royalties. ]
  611.  
  612. -- Marshall
  613.  
  614. -- 
  615. Marshall Clow
  616. Aladdin Systems
  617. mclow@san_marcos.csusm.edu
  618.  
  619. ---------------------------
  620.  
  621. >From drabe@MCS.COM (Daniel Rabe)
  622. Subject: PPC glue for 68K library?
  623. Date: 12 Jan 1995 17:47:51 -0600
  624. Organization: Another MCSNet Subscriber, Chicago's First Public-Access Internet!
  625.  
  626.  
  627. I'm having some problems trying to write glue code so that my PPC app
  628. can call a 68K library.
  629.  
  630. I have an MPW 68K library (.o) that contains about 20 functions that
  631. my PowerPC program wants to link against.  I know how to get a routine
  632. descriptor with the appropriate proc info, but how do I get the address
  633. of one of the 68K functions to pass to NewRoutineDescriptor?  I can't
  634. imagine that any of the PPC linkers can read the 68K .o files, can they?
  635. I've considered creating a 68K CODE resource for each function, but then 
  636. I'd have over 20 CODE resources floating around (one for each function);
  637. plus, this library requires the C Runtime library, and if I linked it into
  638. each CODE resource, strange things might happen (or, at the very least,
  639. each resource would be BIG).  I couldn't find any documentation that says
  640. how this should be done.  Any suggestions?
  641.  
  642. Thanks!
  643. Daniel Rabe
  644.  
  645.  
  646. +++++++++++++++++++++++++++
  647.  
  648. >From Jaeger@fquest.com (Brian Stern)
  649. Date: 13 Jan 1995 06:13:40 GMT
  650. Organization: The University of Texas at Austin, Austin, Texas
  651.  
  652. In article <3f4f37$97m@Mercury.mcs.com>, drabe@MCS.COM (Daniel Rabe) wrote:
  653.  
  654. < I'm having some problems trying to write glue code so that my PPC app
  655. < can call a 68K library.
  656. < I have an MPW 68K library (.o) that contains about 20 functions that
  657. < my PowerPC program wants to link against.  I know how to get a routine
  658. < descriptor with the appropriate proc info, but how do I get the address
  659. < of one of the 68K functions to pass to NewRoutineDescriptor?  I can't
  660. < imagine that any of the PPC linkers can read the 68K .o files, can they?
  661. < I've considered creating a 68K CODE resource for each function, but then 
  662. < I'd have over 20 CODE resources floating around (one for each function);
  663. < plus, this library requires the C Runtime library, and if I linked it into
  664. < each CODE resource, strange things might happen (or, at the very least,
  665. < each resource would be BIG).  I couldn't find any documentation that says
  666. < how this should be done.  Any suggestions?
  667. < Thanks!
  668. < Daniel Rabe
  669.  
  670. I recently did this with an MPW .o lib.  You make a code resource that has
  671. one function, main.  You include your 68K library in the project.  You
  672. pass into main a pointer to a struct that holds the addresses of all of
  673. the routines in the library and your main routine simply fills out this
  674. struct.  When you want to call one of the routines in the library you
  675. simply use CallUniversalProc and pass in the address of that routine and
  676. the appropriate upppProcInfo.  Don't bother actually making upps.  This
  677. all works neatly.  You can write appropriate defines so that your 68K app
  678. and PPC app use the appropriate calling conventions.  In the project that
  679. I'm working on I include the .o lib in the 68K version and the code
  680. resource in the PPC version.  Both use the same header file.
  681.  
  682. Good luck,
  683.  
  684. -- 
  685. Brian  Stern  :-{)}
  686. Toolbox commando and Menu bard
  687. Jaeger@fquest.com
  688.  
  689. +++++++++++++++++++++++++++
  690.  
  691. >From isis@netcom.com (Mike Cohen)
  692. Date: Fri, 13 Jan 1995 19:47:13 GMT
  693. Organization: ISIS International
  694.  
  695. drabe@MCS.COM (Daniel Rabe) writes:
  696.  
  697.  
  698. >I'm having some problems trying to write glue code so that my PPC app
  699. >can call a 68K library.
  700.  
  701. >I have an MPW 68K library (.o) that contains about 20 functions that
  702. >my PowerPC program wants to link against.  I know how to get a routine
  703. >descriptor with the appropriate proc info, but how do I get the address
  704. >of one of the 68K functions to pass to NewRoutineDescriptor?  I can't
  705. >imagine that any of the PPC linkers can read the 68K .o files, can they?
  706. >I've considered creating a 68K CODE resource for each function, but then 
  707. >I'd have over 20 CODE resources floating around (one for each function);
  708. >plus, this library requires the C Runtime library, and if I linked it into
  709. >each CODE resource, strange things might happen (or, at the very least,
  710. >each resource would be BIG).  I couldn't find any documentation that says
  711. >how this should be done.  Any suggestions?
  712.  
  713. >Thanks!
  714. >Daniel Rabe
  715.  
  716. How about ONE code resource, which either has a jump table at the beginning
  717. or takes a selector to dispatch to the correct function?
  718. -- 
  719. Mike Cohen - isis@netcom.com
  720. NewtonMail, eWorld: MikeC / ALink: D6734 / AOL: MikeC20
  721. Home Page: ftp://ftp.netcom.com/pub/is/isis/home.html
  722. PUSH THE BUTTON, FRANK... OR SOMEONE?
  723.  
  724. +++++++++++++++++++++++++++
  725.  
  726. >From sw@network-analysis-ltd.co.uk (Sak Wathanasin)
  727. Date: Sat, 14 Jan 95 00:52:39 GMT
  728. Organization: Network Analysis Ltd
  729.  
  730.  
  731. In article <3f4f37$97m@Mercury.mcs.com> (comp.sys.mac.programmer), 
  732. drabe@MCS.COM (Daniel Rabe) writes:
  733.  
  734. > imagine that any of the PPC linkers can read the 68K .o files, can they?
  735. > I've considered creating a 68K CODE resource for each function, but then 
  736. > I'd have over 20 CODE resources floating around (one for each function);
  737.  
  738. No, create one code resource that dispatches to each of the 20 lib funcs that 
  739. you want to call. Look in the PPC examples folder on ETO, or the PPC-68K 
  740. example on the CodeWarrior CD.
  741.  
  742. Sak Wathanasin
  743. Network Analysis Limited
  744. 178 Wainbody Ave South, Coventry CV3 6BX, UK
  745.  
  746. Internet: sw@network-analysis-ltd.co.uk 
  747. uucp:     ...!uknet!nan!sw                       AppleLink: NAN.LTD
  748. Phone: (+44) 203 419996 Mobile:(+44) 850 587411  Fax: (+44) 203 690690
  749.  
  750. ---------------------------
  751.  
  752. >From mauerj@aol.com (MauerJ)
  753. Subject: PowerPC Globals
  754. Date: 13 Jan 1995 01:42:14 -0500
  755. Organization: America Online, Inc. (1-800-827-6364)
  756.  
  757. I need to access my application's global variables from a Time Manager
  758. task. How can I do this running in native PowerPC mode? 
  759. The way the Inside Mac lists to do it with 68K code is to set up a new
  760. tmInfo structure containing tmTask and a tmRefCon on the end of it. That
  761. way,you can store your app's A5 world in the refcon and access it through
  762. the A1 register in the Time Manager task.
  763.  
  764. Herein lies my problem-how am I supposed to get at the refcon without an
  765. A1 register? Should I try to use this type of method with the native code?
  766. Or is there some really easy solution to this that I just can't see?
  767.  
  768. I hope someone out there knows the answer to this one,because I haven't
  769. found it yet.
  770.  
  771. Thanks,
  772. MauerJ
  773.  
  774. +++++++++++++++++++++++++++
  775.  
  776. >From rudolph@unixg.ubc.ca (Chris Rudolph)
  777. Date: Thu, 12 Jan 1995 23:58:23 -0800
  778. Organization: Motion Works International
  779.  
  780. In article <3f57c6$2ju@newsbf02.news.aol.com>, mauerj@aol.com (MauerJ) wrote:
  781.  
  782. > I need to access my application's global variables from a Time Manager
  783. > task. How can I do this running in native PowerPC mode? 
  784. > The way the Inside Mac lists to do it with 68K code is to set up a new
  785. > tmInfo structure containing tmTask and a tmRefCon on the end of it. That
  786. > way,you can store your app's A5 world in the refcon and access it through
  787. > the A1 register in the Time Manager task.
  788. > Herein lies my problem-how am I supposed to get at the refcon without an
  789. > A1 register? Should I try to use this type of method with the native code?
  790. > Or is there some really easy solution to this that I just can't see?
  791. > I hope someone out there knows the answer to this one,because I haven't
  792. > found it yet.
  793. > Thanks,
  794. > MauerJ
  795.  
  796. Mauer,
  797.  
  798. Your in luck.  One of the nicetys of the Time Manager on the PowerPC is
  799. that pointer to your structure is passed in as a parameter:
  800.  
  801. example:
  802.  
  803. #ifndef powerc
  804.  
  805. typedef struct 
  806. {
  807.    VBLTask  theTask;
  808.    long     A5;
  809.    // Anything else you want to add
  810.  
  811. } MyVBLTask, *MyVBLTaskPtr;
  812.  
  813. // Function prototype
  814.  
  815. pascal void MyVBLProc( VBLTaskPtr inVBLTask );
  816.  
  817. // Inline function to get at your globals
  818.  
  819. pascal MyVBLTaskPtr GetVBLTaskPtr() = 0x2E88;      // MOVE.L A0,A7;
  820.  
  821. #else
  822.  
  823. typedef struct 
  824. {
  825.    VBLTask  theTask;
  826.    // Anything else you want to add
  827.  
  828. } MyVBLTask, *MyVBLTaskPtr;
  829.  
  830. pascal void MyVBLProc( void );
  831.  
  832. #endif
  833.  
  834.  
  835. // ===========================================================================
  836. //    MyVBLProc
  837. //
  838.  
  839. #ifndef powerc
  840.  
  841. pascal void MyVBLProc( void );
  842. {
  843.    long           oldA5;
  844.    MyVBLTaskPtr   theTask =   GetVBLTaskPtr();
  845.  
  846.    // Save and setup your A5 globals
  847.  
  848.    oldA5 = SetA5( theTask->A5 );
  849.  
  850.    ... Do some stuff here for you VBL Task
  851.  
  852.    // Restore the saved A5
  853.  
  854.    (void) SetA5( oldA5 );
  855. }
  856.  
  857. #else
  858.  
  859. pascal void MyVBLProc( VBLTaskPtr inVBLTask )
  860. {
  861.    // Don't need to setup or restore anything, plus
  862.    // Your structure is within easy grasp
  863.  
  864.    ... Do some stuff here for you VBL Task
  865. }
  866.  
  867. #endif
  868.  
  869. - -------------------------------------------------------------------
  870. Chris Rudolph, Senior Engineer,
  871. Technology Works.
  872. Motion Works International.
  873.  
  874. Internet:  rudolph@unixg.ubc.ca
  875. AppleLink: D2276 ( Subject: Attn: Chris Rudolph )
  876. - -------------------------------------------------------------------
  877.  
  878.  
  879. ---------------------------
  880.  
  881. >From mhl@icf.hrb.com (mark)
  882. Subject: Q: Is file on AppleShare volume?
  883. Date: 12 Jan 95 11:16:57 EST
  884. Organization: HRB Systems, Inc.
  885.  
  886. Dear c.s.m.p.h
  887.  
  888. This is kind of a fill in the blank question...
  889.  
  890. #include <Types.h>
  891.  
  892. OSErr FileIsOnAnAppleShareVolume(
  893.    short aFileReferenceNumber, /* refNum of file in question */
  894.    Boolean *onAppleShare /* returned as 'true' if the referenced 
  895.                           * file is on an AppleShare volume, or
  896.                           * 'false' otherwise. */
  897. ) {
  898.    OSErr theError = noErr;
  899.  
  900.    ...
  901.    if ((theError == noErr) && (...)) {
  902.       *onAppleShare = true;
  903.    } else {
  904.       *onAppleShare = false;
  905.    }
  906.    return theError;
  907. }
  908.  
  909. In searching throught NIM:Files I _did_ find a structure that tells
  910. whether a volume is AppleShare or not. Unfortunately, I could not find a
  911. routine which returned that data structure.
  912.  
  913. Any takers on how to flesh out this routine?
  914.  
  915. -- 
  916. Mark H. Linton
  917.  
  918. PS: Bring me the blue pages.
  919.  
  920. +++++++++++++++++++++++++++
  921.  
  922. >From jumplong@aol.com (Jump Long)
  923. Date: 18 Jan 1995 00:01:10 -0500
  924. Organization: America Online, Inc. (1-800-827-6364)
  925.  
  926. >In searching throught NIM:Files I _did_ find a structure that tells
  927. >whether a volume is AppleShare or not. Unfortunately, I could not find a
  928. >routine which returned that data structure.
  929. >
  930. >Any takers on how to flesh out this routine?
  931.  
  932. Using routines GetFileLocation and HGetVolParms, and macro isNetworkVolume
  933. from Apple's MoreFiles sample code makes this easy:
  934.  
  935. OSErr FileIsOnNetworkVolume(short refNum,  Boolean *onNetworkVolume)
  936. {
  937.  OSErr     result;
  938.  short     vRefNum;
  939.  long     dirID;
  940.  GetVolParmsInfoBuffer volParmsInfo;
  941.  long     infoSize;
  942.  
  943.  result = GetFileLocation(refNum, &vRefNum, &dirID, NULL);
  944.  if ( result == noErr )
  945.  {
  946.   infoSize = sizeof(GetVolParmsInfoBuffer);
  947.   if ( HGetVolParms(NULL, vRefNum, &volParmsInfo, &infoSize) == noErr )
  948.   {
  949.    *onNetworkVolume = isNetworkVolume(volParmsInfo);
  950.   }
  951.   else
  952.   {
  953.    /* Volume must support GetVolParms to be a netowrk volume */
  954.    *onNetworkVolume = false;
  955.   }
  956.  }
  957.  return ( result );
  958. }
  959.  
  960. Note that this routine simply identifies network volumes.
  961.  
  962. If you want to specifically check for AppleShare network volumes, you
  963. should call PBHGetVInfo to get the volume's drive number, search the drive
  964. queue to find the drvQEl for the drive and get the driver reference number
  965. from the drvQEl, and then compare that driver reference number to the
  966. driver reference number of the .AFPTranslator driver (the driver that owns
  967. all AppleShare volumes).
  968.  
  969. - Jim Luther
  970.  
  971. ---------------------------
  972.  
  973. >From patrickd@sandstone.WPI.EDU (Patrick D.)
  974. Subject: Registering an NBP name?
  975. Date: 15 Jan 1995 04:02:50 GMT
  976. Organization: Satellite of Love - Satellite.res.wpi.edu
  977.  
  978. How do I go about registering an NBP name on an AppleTalk network?  I'd like
  979. some sample source code that works with Think C 5.0 or 6.0 or Think Pascal.
  980. ...and I kinda need the source code to work.  I've asked in the past and the
  981. code I got wouldn't compile.
  982.  
  983. -- 
  984. -Patrick Delahanty            | BEWARE!: MST3K, the TICK, TMBG, Phish, and
  985. PatrickD@Satellite.res.wpi.edu| Star Trek fan!  Macintosh Evangelist & Guru
  986. - ----------------------------+--------------------------------------------
  987. http://www.wpi.edu/~patrickd/ |    Veteran MST3K Fan - Info Club # 6563
  988.  
  989. +++++++++++++++++++++++++++
  990.  
  991. >From jumplong@aol.com (Jump Long)
  992. Date: 18 Jan 1995 00:17:45 -0500
  993. Organization: America Online, Inc. (1-800-827-6364)
  994.  
  995. >How do I go about registering an NBP name on an AppleTalk network?  I'd
  996. >like some sample source code that works with Think C 5.0 or 6.0 or Think
  997. >Pascal. ...and I kinda need the source code to work.  I've asked in the
  998. >past and the code I got wouldn't compile.
  999.  
  1000. Here's a C port of the code I wrote for IM: Networking.
  1001.  
  1002. - Jim Luther
  1003.  
  1004. /*
  1005. ** Registers a entity with the specified object and type on the
  1006. ** specified socket.  The pointer to the NamesTableEntry is returned in
  1007. ** ntePtr if the function returns noErr.
  1008. */
  1009. OSErr MyRegisterName(ConstStr32Param entityObject, ConstStr32Param
  1010. entityType,
  1011.       short socket, NamesTableEntry **ntePtr)
  1012. {
  1013.  MPPParamBlock mppPB;
  1014.  OSErr   result;
  1015.  Str32   entityZone = "\p*";
  1016.  
  1017.  /* Allocate non-relocatable memory in the system heap for the names table
  1018. entity */
  1019.  *ntePtr = (NamesTableEntry *) NewPtrSys((Size) sizeof(NamesTableEntry));
  1020.  
  1021.  if ( ntePtr == NULL )
  1022.  {
  1023.   result = MemError(); /* Return memory error */
  1024.  }
  1025.  else
  1026.  {
  1027.   /* Build the names table entity */
  1028.   NBPSetNTE((Ptr) *ntePtr, (Ptr) entityObject, (Ptr) entityType, (Ptr)
  1029. entityZone, socket);
  1030.   
  1031.   /* ioRefNum and csCode are filled in by PRegisterName's glue */
  1032.   mppPB.NBPinterval = 0x0f;   /* Reasonable values for the interval and */
  1033.   mppPB.NBPcount = 0x03;    /* retry count */
  1034.   mppPB.NBPentityPtr = (Ptr) *ntePtr; /* Pointer to NamesTableEntry */
  1035.   mppPB.NBPverifyFlag = (char) true; /* Make sure name is unique */
  1036.   
  1037.   result = PRegisterName(&mppPB, false); /* Register the name */
  1038.  
  1039.   if ( result != noErr )
  1040.    DisposePtr((Ptr) *ntePtr); /* If error, give space back */
  1041.  }
  1042.  
  1043.  return ( result );
  1044. }
  1045.  
  1046. ---------------------------
  1047.  
  1048. >From rjohnson@ (Ray Johnson)
  1049. Subject: What key code is Command-.  (One for the FAQ)
  1050. Date: 16 Jan 1995 23:17:34 GMT
  1051. Organization: Sun Microsystems, Inc.  Mt. View, Ca.
  1052.  
  1053. In the book Inside Mac "Macintosh Toolbox Essentials" concerning the
  1054. Event Manager, they have a section about looking for Command-. event.
  1055. They show sample code that implies that the period key may change
  1056. if the user changes the script.  However, it really doesn't show the
  1057. best way to look for the Command-. event.
  1058.  
  1059. What is the best way to look for Command-. ??? 
  1060.  
  1061. This seems like a good question to be in the FAQ.  (Even if it isn't
  1062. asked alot - it should be!)
  1063.  
  1064. Ray
  1065.  
  1066.  
  1067.  
  1068.  
  1069. +++++++++++++++++++++++++++
  1070.  
  1071. >From Anders.Wahlin@hum.gu.se (Anders Wahlin)
  1072. Date: Tue, 17 Jan 1995 07:38:43 GMT
  1073. Organization: Hum Fak:s Dataservice
  1074.  
  1075. In article <3feuqe$baa@engnews2.Eng.Sun.COM>, rjohnson@ (Ray Johnson) wrote:
  1076.  
  1077. > In the book Inside Mac "Macintosh Toolbox Essentials" concerning the
  1078. > Event Manager, they have a section about looking for Command-. event.
  1079. > They show sample code that implies that the period key may change
  1080. > if the user changes the script.  However, it really doesn't show the
  1081. > best way to look for the Command-. event.
  1082. > What is the best way to look for Command-. ??? 
  1083. > This seems like a good question to be in the FAQ.  (Even if it isn't
  1084. > asked alot - it should be!)
  1085. > Ray
  1086.  
  1087.  
  1088. When I'm looking for a Command-. in a dialog, I call this function in the
  1089. dialog filter:
  1090.  
  1091. Boolean Cmd_Period(short theModifier, char theKey) {
  1092.    if (((theModifier & cmdKey) != 0) && (theKey == '.')) return (TRUE);
  1093.    return (FALSE);
  1094. }
  1095.  
  1096. Like this:
  1097.  
  1098.    if (Cmd_Period(theEvent->modifiers, theChar)) {
  1099.       /* Cancel */
  1100.    }
  1101.  
  1102.  
  1103.  
  1104. When I'm looking for a Command-. in an application that isn't using events
  1105. I call this function:
  1106.  
  1107. Boolean KeyPressed(unsigned short theCharCode) {
  1108.       unsigned char keyMap[16];
  1109.  
  1110.    GetKeys((long *)keyMap);
  1111.    return ((keyMap[theCharCode>>3] >> (theCharCode& 7)) & 1);
  1112. }
  1113.  
  1114. Like this:
  1115.  
  1116.    if ( (KeyPressed(55)) && (KeyPressed(47)) ) {
  1117.       /* Cancel */
  1118.    }
  1119.  
  1120. -- 
  1121. Anders Wahlin
  1122. Anders.Wahlin@hum.gu.se
  1123.  
  1124. +++++++++++++++++++++++++++
  1125.  
  1126. >From stk@DoBag.IN-Berlin.DE (Stefan Kurth)
  1127. Date: Wed, 18 Jan 1995 00:51:26 +0100
  1128. Organization: none
  1129.  
  1130. Anders Wahlin <Anders.Wahlin@hum.gu.se> wrote:
  1131.  
  1132. > When I'm looking for a Command-. in a dialog, I call this function in the
  1133. > dialog filter:
  1134. >
  1135. > Boolean Cmd_Period(short theModifier, char theKey) {
  1136. >    if (((theModifier & cmdKey) != 0) && (theKey == '.')) return (TRUE);
  1137. >    return (FALSE);
  1138. > }
  1139.  
  1140. Now this is of course exactly what you should -not- be doing, because it
  1141. doesn't work on keyboards where the '.' character is shifted.
  1142.  
  1143. Go read NIM:Text (appendix C, pages C-23 and C-24), it explains how to
  1144. handle it correctly.
  1145.  
  1146.  
  1147. > Boolean KeyPressed(unsigned short theCharCode) {
  1148. >       unsigned char keyMap[16];
  1149. >
  1150. >    GetKeys((long *)keyMap);
  1151. >    return ((keyMap[theCharCode>>3] >> (theCharCode& 7)) & 1);
  1152. > }
  1153. ...
  1154. >    if ( (KeyPressed(55)) && (KeyPressed(47)) ) {
  1155. >       /* Cancel */
  1156. >    }
  1157.  
  1158. Huuh, even worse.  Don't make assumptions on the virtual key codes of
  1159. characters.
  1160.  
  1161. ________________________________________________________________________
  1162. Stefan Kurth             Berlin, Germany          stk@dobag.in-berlin.de
  1163.  
  1164. +++++++++++++++++++++++++++
  1165.  
  1166. >From jens_alfke@powertalk.apple.com (Jens Alfke)
  1167. Date: Wed, 18 Jan 1995 20:41:20 GMT
  1168. Organization: Apple Computer, Inc.
  1169.  
  1170. Anders.Wahlin@hum.gu.se (Anders Wahlin) wrote:
  1171. > When I'm looking for a Command-. in a dialog, I call this function in the
  1172. > dialog filter:
  1173.  
  1174. The trouble with that function is that it assumes that no shift (or other)
  1175. modifier is needed to get a period. On non-English keyboards where you do
  1176. need a modifier, the code you gave won't work.
  1177. There is an Apple tech note on "International Canceling" that gives sample
  1178. code that will work on any Macintosh worldwide.
  1179.  
  1180.  
  1181. Jens Alfke_________OpenDoc Geometer_________jens_alfke@powertalk.apple.com
  1182.                                               OpenDoc info: FTP to cil.org
  1183.  
  1184.          Visit Scenic Flood Control Dam No. 3.      
  1185.  
  1186. ---------------------------
  1187.  
  1188. >From steph@bebop.frcl.bull.fr (Stphane Knigsdrfer)
  1189. Subject: dynamic-shared libs on MacOS ???
  1190. Date: 9 Jan 1995 09:21:56 GMT
  1191. Organization: BULL S.A.
  1192.  
  1193.  
  1194. -- 
  1195. Hi NetWorkers !
  1196.  
  1197. Could anybody tell me if MacOS (and from which version) supports
  1198. dynamic/shared libraries ?
  1199.  
  1200. Thanx, Steph.
  1201.  
  1202. ===============================================================================
  1203.    Stephane Konigsdorfer                 
  1204.    (Poste courrier A5/146)               Tel.: +33 (1) 30 80 70 70
  1205.    BULL S.A.                             Fax.: +33 (1) 30 80 77 99
  1206.    Rue Jean Jaures
  1207.    78340 Les Clayes-sous-Bois            E-mail: S.Konigsdorfer@frcl.bull.fr
  1208.    FRANCE                                
  1209. ===============================================================================
  1210.  
  1211. +++++++++++++++++++++++++++
  1212.  
  1213. >From Joern Loviscach <jl@lovia.teuto.de>
  1214. Date: 9 Jan 1995 21:08:57 GMT
  1215. Organization: POP Contrib.Net Netzdienste GmbH, Bielefeld, Germany
  1216.  
  1217. steph@bebop.frcl.bull.fr (Stphane Knigsdrfer) wrote:
  1218.  
  1219. > Could anybody tell me if MacOS (and from which version) supports
  1220. > dynamic/shared libraries ?
  1221.  
  1222. Yes. On PPC via code fragment manager, on 68K via shared library
  1223. manager (quite new). Concerning the code fragment manager, take
  1224. a look into "Inside Macintosh: PowerPC System Software".
  1225. It's available on ftp://ftp.info.apple.com/.
  1226.  
  1227. - -Joern Loviscach
  1228.  
  1229. +++++++++++++++++++++++++++
  1230.  
  1231. >From jwbaxter@olympus.net (John W. Baxter)
  1232. Date: Mon, 09 Jan 1995 19:08:50 -0800
  1233. Organization: Internet for the Olympic Peninsula
  1234.  
  1235. In article <3es8l9$vp7@linteuto.teuto.de>, Joern Loviscach
  1236. <jl@lovia.teuto.de> wrote:
  1237.  
  1238. > steph@bebop.frcl.bull.fr (Stphane Knigsdrfer) wrote:
  1239. >  
  1240. > > Could anybody tell me if MacOS (and from which version) supports
  1241. > > dynamic/shared libraries ?
  1242. > Yes. On PPC via code fragment manager, on 68K via shared library
  1243. > manager (quite new). Concerning the code fragment manager, take
  1244. > a look into "Inside Macintosh: PowerPC System Software".
  1245. > It's available on ftp://ftp.info.apple.com/.
  1246.  
  1247. Apple Shared Library Manager isn't all *that* new...it goes back (in
  1248. released form) at least to day 1 of FoxPro 2.5 (the current FoxPro is
  1249. 2.6).  [FoxPro 2.5 used Microsoft's "Shared Code Manager" which in turn
  1250. used Apple Shared Library Manager.]
  1251.  
  1252. And Code Fragment Manager is coming to the 68K world (public knowledge,
  1253. thanks to the OpenDoc CD available to all), probably this year (common
  1254. guess).
  1255.  
  1256. Apple Shared Library Manager is happiest with C++ (it can work in a
  1257. limited way with C or Pascal).  And it's only happy when the client code
  1258. is built with the same C++ which built the library.  But it does allow
  1259. client code to compile a subclass of a class defined in the shared
  1260. library.
  1261.  
  1262. SOM (IBM's acronym and product) comes with OpenDoc, and relieves the
  1263. requirement that the library and client come from the same compiler.
  1264.  
  1265.    --John
  1266.  
  1267. -- 
  1268. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  1269.        Isn't C fun?
  1270.    jwbaxter@pt.olympus.net
  1271.  
  1272. +++++++++++++++++++++++++++
  1273.  
  1274. >From caleb@delbruck.pharm.sunysb.edu (Caleb Strockbine)
  1275. Date: 12 Jan 1995 19:25:11 GMT
  1276. Organization: SUNY Stony Brook
  1277.  
  1278. In article <3es8l9$vp7@linteuto.teuto.de> Joern Loviscach <jl@lovia.teuto.de> writes:
  1279. >steph@bebop.frcl.bull.fr (Stphane Knigsdrfer) wrote:
  1280. >> Could anybody tell me if MacOS (and from which version) supports
  1281. >> dynamic/shared libraries ?
  1282. >
  1283. >Yes. On PPC via code fragment manager, on 68K via shared library
  1284. >manager (quite new). Concerning the code fragment manager, take
  1285. >a look into "Inside Macintosh: PowerPC System Software".
  1286. >It's available on ftp://ftp.info.apple.com/.
  1287.  
  1288.  
  1289. I spoke with someone from Apple at the San Fransisco MacWorld Expo
  1290. who told me that the Code Fragment Manager is now available for
  1291. 68K as well as PPC. He recommended CFM for all my shared library 
  1292. needs.
  1293.  
  1294. Caleb Strockbine
  1295.  
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304. ---------------------------
  1305.  
  1306. End of C.S.M.P. Digest
  1307. **********************
  1308.